package musgo

import org.springframework.dao.DataIntegrityViolationException

class EventoController extends BaseController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
    def beforeInterceptor = [action:this.&auth, except:['show', 'list',]]
    def index() {
        redirect(action: "list", params:[ide:2])
    }

    def list(Integer max) {
        
        params.max = Math.min(max ?: 10, 100)
                                         
        def artistaInstance = Artista.get(params.ide)   //traemos al artista para mostra solo los albunes del artista
       
        [eventoInstanceList: Evento.list(params), eventoInstanceTotal: Evento.count(),artista:artistaInstance]
    }

    def create() {
        
        
        if(params.form_idA!= null){         //informacon provenga del formulario
            Date fechalan
            println params.YYYY.equals("")         //cuadra la f de fecha evento 
            if(params.YYYY.equals("") || params.MM.equals("") || params.DD.equals("") ){
                fechalan=null
            }else{
             fechalan = new Date((Integer.parseInt(params.YYYY)-1900), Integer.parseInt(params.MM), Integer.parseInt(params.DD))
            }
            def evento = new Evento(params)    //crea el evento com los parametros que mando el formulario
            evento.evento=fechalan  //lengthponemos la fecha valida
          
            
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	 String fallo;
	def f = request.getFile("imagen")
	if (!f.empty) {
		imagen = new Imagen(nombre : f.originalFilename
			, tipoContenido : f.contentType, tamano : f.size
			, archivo : f.bytes).save()
		evento.imagenEv=imagen	
            }else{
            evento.imagenEv=Imagen.get(1);   
            }
       
                               //agraga imagen al evento
       def ide= Artista.findByNick(session.nick)    //busca el artista de la sesion
       Artista art= Artista.get(ide.id)
       evento.artista=art;                           //le mete ela artista del album
     
       if(!evento.hasErrors() && evento.save()){
            fallo="" 
            redirect(action:"show", id:evento.id)  //envia a show con id del albun recien creado	
	}
         fallo = "Lo sentimos no se pudo guardar tu evento intenta de Nuevo"  //
            [falla:fallo]
        }
        //[eventoInstance: new Evento(params)]
    }

    def save() {
        def eventoInstance = new Evento(params)
        if (!eventoInstance.save(flush: true)) {
            render(view: "create", model: [eventoInstance: eventoInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'evento.label', default: 'Evento'), eventoInstance.id])
        redirect(action: "show", id: eventoInstance.id)
    }

    def show(Long id) {
        def eventoInstance = Evento.get(id)
        def artista = Artista.get(eventoInstance.artista.id)
       
        if (!eventoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'evento.label', default: 'Evento'), id])
            redirect(action: "list")
            return
        }

        [eventoInstance: eventoInstance,artista:artista]
    }

    def edit(Long id) {
        def eventoInstance = Evento.get(id)
        if (!eventoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'evento.label', default: 'Evento'), id])
            redirect(action: "list")
            return
        }

        [eventoInstance: eventoInstance]
    }

    def update(Long ide, Long version) {
        
        if(!params.foto.equals("true")){
            def eventoInstance = Evento.get(params.ide)
            eventoInstance.properties = params
             if(!params.YYYY.equals("") && !params.MM.equals("") && !params.DD.equals("") ){
                def fechaEvento = new Date((Integer.parseInt(params.YYYY)-1900), Integer.parseInt(params.MM), Integer.parseInt(params.DD)) 
                eventoInstance.evento=fechaEvento
            }
            

        if (!eventoInstance.save(flush: true)) {
            render(view: "edit", model: [eventoInstance: eventoInstance])
            return
        }

        flash.message = message(code: 'default.updated.message', args: [message(code: 'evento.label', default: 'Evento'), eventoInstance.id])
        redirect(action: "show", id: eventoInstance.id)
        } else{
        //para actulizar al foto de evento
        def eventoInstance = Evento.get(ide)
        
        if(eventoInstance.imagenEv.id != 1){
            def imagenInstance = Imagen.get(eventoInstance.imagenEv.id)
           
            imagenInstance.delete()
        }
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	 
	def f = request.getFile("imagen")
	if (!f.empty) {
		imagen = new Imagen(nombre : f.originalFilename
			, tipoContenido : f.contentType, tamano : f.size
			, archivo : f.bytes).save()
		eventoInstance.imagenEv=imagen	
            }else{
            eventoInstance.imagenEv=Imagen.get(1);   
            }
        eventoInstance.save(flush: true)
        redirect(action: "show", id: eventoInstance.id)
        }
    }// fin actualizar evento

    def delete(Long id) {
        
        def eventoInstance = Evento.get(id)
        def art = Artista.get(eventoInstance.artista.id)
        if (!eventoInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'evento.label', default: 'Evento'), id])
            redirect(action: "list", params:[ide:art.id])
            return
        }

        try {
            eventoInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'evento.label', default: 'Evento'), id])
            redirect(action: "list",params:[ide:art.id])
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'evento.label', default: 'Evento'), id])
            redirect(action: "show", id: id)
        }
    }
}
